package classes;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Classe abstrata que contem o main, onde todo a parte grafica e realizada.
 * @author equipe
 *
 */
public abstract class Biblioteca {

	/**
	 * @param args
	 */
	static TelaPesquisaLivro telaPesquisa;
	static TelaDeLogin telaDeLogin;
	static TelaCadastro telaDeCadastro;
	static TelaCadastroDeLivro telaCadastroDeLivro;
	static ArrayList<Professor> listaDeProfessores;
	private static String txtNome;
	private static String txtMatricula;
	private static String txtBloco;
	private static String txtSala;
	
	public static void main(String[] args) throws Exception {
        listaDeProfessores = new ArrayList<Professor>();
        
//        if (listaDeProfessores.size() == 0) {
//			listaDeProfessores = GravaCadastros.readObjects();
//		}
        

	        try {
	            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
	                if ("Nimbus".equals(info.getName())) {
	                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
	                    break;
	                }
	            }
	        } catch (ClassNotFoundException ex) {
	            java.util.logging.Logger.getLogger(TelaDeLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
	        } catch (InstantiationException ex) {
	            java.util.logging.Logger.getLogger(TelaDeLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
	        } catch (IllegalAccessException ex) {
	            java.util.logging.Logger.getLogger(TelaDeLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
	        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
	            java.util.logging.Logger.getLogger(TelaDeLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
	        }

	        java.awt.EventQueue.invokeLater(new Runnable() {
	            public void run() {
	                telaDeLogin = new TelaDeLogin();
	                telaDeLogin.setLocationRelativeTo(null);
	                telaDeLogin.setVisible(true);
	                
	            }
	        });
	        
	    }
	
	/**
	 * Recupera o nome do usuario do campo da tela.
	 * @return
	 * 		Retorna o nome do usuario do campo da tela.
	 */
	public static String getTxtNome() {
		return txtNome;
	}
	
	/**
	 * Configura o nome do usuario do campo da tela.
	 * @param txtNome
	 * 		Nome do usuario a ser configurado.
	 */
	public static void setTxtNome(String txtNome) {
		Biblioteca.txtNome = txtNome;
	}
	
	/**
	 * Recupera a matricula do usuario do campo da tela.
	 * @return
	 * 		Retorna a matricula do usuario do campo da tela.
	 */
	public static String getTxtMatricula() {
		return txtMatricula;
	}
	
	/**
	 * Configura a matricula do usuario do campo da tela.
	 * @param txtMatricula
	 * 		Numero da matricula a ser configurado.
	 */
	public static void setTxtMatricula(String txtMatricula) {
		Biblioteca.txtMatricula = txtMatricula;
	}
	
	/**
	 * Recupera o bloco do usuario do campo da tela.
	 * @return
	 * 		Retorna o bloco do usuario do campo da tela.
	 */
	public static String getTxtBloco() {
		return txtBloco;
	}
	
	/**
	 * Configura o bloco do usuario do campo da tela.
	 * @param txtMatricula
	 * 		String do bloco a ser configurado.
	 */
	public static void setTxtBloco(String txtBloco) {
		Biblioteca.txtBloco = txtBloco;
	}
	
	/**
	 * Recupera a sala do usuario do campo da tela.
	 * @return
	 * 		Retorna a sala do usuario do campo da tela.
	 */
	public static String getTxtSala() {
		return txtSala;
	}
	
	/**
	 * Configura a sala do usuario do campo da tela.
	 * @param txtMatricula
	 * 		String da sala a ser configurado.
	 */
	public static void setTxtSala(String txtSala) {
		Biblioteca.txtSala = txtSala;
	}
	
	/**
	 * Recupera o numero da sala do usuario do campo da tela.
	 * @return
	 * 		Retorna o numero da sala do usuario do campo da tela.
	 */
	public static int getNumeroDaSala() {
		return Integer.parseInt(txtSala);
	}
	
	/**
	 * Metodo que adiciona um professor na colecao.
	 * @param professor
	 * 		Professor a ser adicionado na colecao.
	 */
	public static void adicionaProfessor(Professor professor) throws FileNotFoundException, IOException{
		listaDeProfessores.add(professor);
		GravaCadastros.writeObjects(listaDeProfessores);
	}
	
	/**
	 * Metodo que permite a busca (pelo indice) de um professor na colecao.
	 * @param i
	 * 		Indice que representa cada posicao em que cada professor estar.
	 * @return
	 * 		Retorna o professor que esta na posicao i da colecao.
	 */
	public static Professor buscaProfessor(int i){
		return listaDeProfessores.get(i);
	}
	
}